package com.xbongbong.pro.statistic.enums;

import com.xbongbong.i18n.util.I18nMessageUtil;
import lombok.Getter;

import java.util.Objects;

/**
 * 图表限制类型
 *
 * @author zcp
 * @version v1.0
 * @date 2019/1/11
 * @since v1.0
 */
@Getter
public enum ChartLimitTypeEnum {
    /**
     * BI单表数据量限制
     */
    BI_DATA_NUM_LIMIT(1,"biDataNumLimit","enum.chartLimitType.name.bi_data_num_limit"),

    /**
     *  每个仪表盘下的报表数量限制
     */
    CHART_NUM_LIMIT(2,"chartNumLimit","enum.chartLimitType.name.chart_num_limit"),
    /**
     * BI多表限制量
     */
    BI_MUITI_DATA_NUM_LIMIT(3,"biMultiDataNumLimit","enum.chartLimitType.name.bi_multi_data_num_limit"),
    /**
     * 数据源选择
     */
    CHART_DATA_SOURCE_LIMIT(4,"chartDataSourceLimit","数据源选择"),
    /**
     * 查询表导出数量的特殊处理
     */
    CHART_DATA_EXPORT_LIMIT(5,"chartDataExportLimit","查询表导出数量的特殊处理"),
    /**
     * 统计表数量的特殊处理
     */
    CHART_STATISTICS_TABLE_CK_LIMIT(6,"statisticsTableLimit","统计表数量的特殊处理"),
    /**
     * 统计表导出数量的特殊处理
     */
    CHART_STATISTICS_TABLE_EXPORT_CK_LIMIT(7,"statisticsTableExportLimit","统计表导出数量的特殊处理"),
    /**
     * 数据集数量限制
     */
    DATA_SET_NUM_LIMIT(8,"dataSetNumLimit","数据集数量限制"),
    ;

    /**
     * 图表类型code值
     */
    private int code;
    /**
     * alias
     */
    private String alias;
    /**
     * 图表类型名
     */
    private String name;


    ChartLimitTypeEnum(int code,String alias, String name) {
        this.code = code;
        this.alias = alias;
        this.name = name;
    }

    /**
     * 根据code值获取枚举
     * @param code
     * @return
     */
    public static ChartLimitTypeEnum getByCode(Integer code) {
        for (ChartLimitTypeEnum cacheCode : values()) {
            if (Objects.equals(cacheCode.code,code)) {
                return cacheCode;
            }
        }
        return null;
    }

    /**
     * 根据alias值获取枚举
     * @param alias
     * @return
     */
    public static ChartLimitTypeEnum getByAlias(String alias) {
        for (ChartLimitTypeEnum cacheCode : values()) {
            if (Objects.equals(cacheCode.alias,alias)) {
                return cacheCode;
            }
        }
        return null;
    }

    public String getName() {
        return I18nMessageUtil.getMessage(name);
    }
}
